home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / task / tswitch.frm < prev    next >
Text File  |  1996-12-27  |  7KB  |  172 lines

  1. VERSION 4.00
  2. Begin VB.Form Form1 
  3.    BorderStyle     =   3  'Fixed Dialog
  4.    Caption         =   "Task Switch"
  5.    ClientHeight    =   3720
  6.    ClientLeft      =   3045
  7.    ClientTop       =   2145
  8.    ClientWidth     =   3930
  9.    Height          =   4125
  10.    Icon            =   "TSwitch.frx":0000
  11.    Left            =   2985
  12.    LinkTopic       =   "Form1"
  13.    MaxButton       =   0   'False
  14.    MinButton       =   0   'False
  15.    ScaleHeight     =   3720
  16.    ScaleWidth      =   3930
  17.    ShowInTaskbar   =   0   'False
  18.    Top             =   1800
  19.    Width           =   4050
  20.    Begin VB.ListBox lstApp 
  21.       Height          =   2985
  22.       Left            =   0
  23.       TabIndex        =   3
  24.       Top             =   0
  25.       Width           =   3855
  26.    End
  27.    Begin VB.CommandButton cmdExit 
  28.       Caption         =   "&Exit"
  29.       Height          =   495
  30.       Left            =   2640
  31.       TabIndex        =   2
  32.       Top             =   3120
  33.       Width           =   1215
  34.    End
  35.    Begin VB.CommandButton cmdSwitch 
  36.       Caption         =   "&Switch"
  37.       Height          =   495
  38.       Left            =   1320
  39.       TabIndex        =   1
  40.       Top             =   3120
  41.       Width           =   1215
  42.    End
  43.    Begin VB.CommandButton cmdRefresh 
  44.       Caption         =   "&Refresh"
  45.       Height          =   495
  46.       Left            =   0
  47.       TabIndex        =   0
  48.       Top             =   3120
  49.       Width           =   1215
  50.    End
  51. End
  52. Attribute VB_Name = "Form1"
  53. Attribute VB_Creatable = False
  54. Attribute VB_Exposed = False
  55. Option Explicit
  56.  
  57. 'WIN16/32 Directive
  58. #If Win16 Then
  59.     Declare Function ShowWindow Lib "User" (ByVal hWnd As Integer, ByVal flgs As Integer) As Integer
  60.     Declare Function GetWindow Lib "User" (ByVal hWnd As Integer, ByVal wCmd As Integer) As Integer
  61.     Declare Function GetWindowWord Lib "User" (ByVal hWnd As Integer, ByVal wIndx As Integer) As Integer
  62.     Declare Function GetWindowLong Lib "User" (ByVal hWnd As Integer, ByVal wIndx As Integer) As Long
  63.     Declare Function GetWindowText Lib "User" (ByVal hWnd As Integer, ByVal lpSting As String, ByVal nMaxCount As Integer) As Integer
  64.     Declare Function GetWindowTextLength Lib "User" (ByVal hWnd As Integer) As Integer
  65.     Declare Function SetWindowPos Lib "User" (ByVal hWnd As Integer, ByVal insaft As Integer, ByVal x%, ByVal y%, ByVal cx%, ByVal cy%, ByVal flgs As Integer) As Integer
  66. #Else
  67.     Private Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, ByVal flgs As Long) As Long
  68.     Private Declare Function GetWindow Lib "User32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
  69.     Private Declare Function GetWindowWord Lib "User32" (ByVal hWnd As Long, ByVal wIndx As Long) As Long
  70.     Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal wIndx As Long) As Long
  71.     Private Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpSting As String, ByVal nMaxCount As Long) As Long
  72.     Private Declare Function GetWindowTextLength Lib "User32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
  73.     Private Declare Function SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal insaft As Long, ByVal x%, ByVal y%, ByVal cx%, ByVal cy%, ByVal flgs As Long) As Long
  74. #End If
  75.  
  76. Const WS_MINIMIZE = &H20000000  ' Style bit 'is minimized'
  77. Const HWND_TOP = 0              ' Move to top of z-order
  78. Const SWP_NOSIZE = &H1          ' Do not re-size window
  79. Const SWP_NOMOVE = &H2          ' Do not reposition window
  80. Const SWP_SHOWWINDOW = &H40     ' Make window visible/active
  81. Const GW_HWNDFIRST = 0          ' Get first Window handle
  82. Const GW_HWNDNEXT = 2           ' Get next window handle
  83. Const GWL_STYLE = (-16)         ' Get Window's style bits
  84. Const SW_RESTORE = 9            ' Restore window
  85. Dim IsTask As Long              ' Style bits for normal task
  86.  
  87. ' The following bits will be combined to define properties
  88. ' of a 'normal' task top-level window.  Any window with ' these set will be
  89. ' included in the list:
  90. Const WS_VISIBLE = &H10000000      ' Window is not hidden
  91. Const WS_BORDER = &H800000         ' Window has a border
  92.  
  93. ' Other bits that are normally set include:
  94. Const WS_CLIPSIBLINGS = &H4000000  ' can clip windows
  95. Const WS_THICKFRAME = &H40000      ' Window has thick border
  96. Const WS_GROUP = &H20000           ' Window is top of group
  97. Const WS_TABSTOP = &H10000         ' Window has tabstop
  98.  
  99. Sub cmdExit_Click()
  100. Unload Me               ' Get me out of here!
  101. 'Set Me = Nothing  ' Kill Form reference for good measure
  102. End Sub
  103.  
  104. Sub cmdRefresh_Click()
  105. FindAllApps  ' Update list of tasks
  106. End Sub
  107.  
  108.                Sub cmdSwitch_Click()
  109.                Dim hWnd As Long    ' handle to window
  110.                Dim x As Long          ' work area
  111.                Dim lngWW As Long      ' Window Style bits
  112.                If lstApp.ListIndex < 0 Then Beep: Exit Sub
  113.                ' Get window handle from listbox array
  114.                hWnd = lstApp.ItemData(lstApp.ListIndex)
  115.                ' Get style bits for window
  116.                lngWW = GetWindowLong(hWnd, GWL_STYLE)
  117.                ' If minimized do a restore
  118.                If lngWW And WS_MINIMIZE Then
  119.                        x = ShowWindow(hWnd, SW_RESTORE)
  120.                End If
  121.                ' Move window to top of z-order/activate; no move/resize
  122.                x = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, _
  123.                        SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW)
  124.                End Sub
  125.  
  126. Sub FindAllApps()
  127. Dim hwCurr As Long
  128. Dim intLen As Long
  129. Dim strTitle As String
  130. ' process all top-level windows in master window list
  131. lstApp.Clear
  132. hwCurr = GetWindow(Me.hWnd, GW_HWNDFIRST)  ' get first window
  133. Do While hwCurr  ' repeat for all windows
  134.   If hwCurr <> Me.hWnd And TaskWindow(hwCurr) Then
  135.     intLen = GetWindowTextLength(hwCurr) + 1 ' Get length
  136.     strTitle = Space$(intLen) ' Get caption
  137.     intLen = GetWindowText(hwCurr, strTitle, intLen)
  138.     If intLen > 0 Then ' If we have anything, add it
  139.       lstApp.AddItem strTitle
  140. ' and let's save the window handle in the itemdata array
  141.       lstApp.ItemData(lstApp.NewIndex) = hwCurr
  142.     End If
  143.   End If
  144.   hwCurr = GetWindow(hwCurr, GW_HWNDNEXT)
  145. Loop
  146. End Sub
  147.  
  148.  
  149. Sub Form_Load()
  150. IsTask = WS_VISIBLE Or WS_BORDER  ' Define bits for normal task
  151. FindAllApps                       ' Update list
  152. End Sub
  153.  
  154.                Sub Form_Paint()
  155.                FindAllApps  ' Update List
  156.                End Sub
  157.  
  158. Sub Label1_Click()
  159. FindAllApps  ' Update list
  160. End Sub
  161.  
  162.                Sub lstApp_DblClick()
  163.                cmdSwitch.Value = True
  164.                End Sub
  165.  
  166. Function TaskWindow(hwCurr As Long) As Long
  167. Dim lngStyle As Long
  168. lngStyle = GetWindowLong(hwCurr, GWL_STYLE)
  169. If (lngStyle And IsTask) = IsTask Then TaskWindow = True
  170. End Function
  171.  
  172.